package fanxing;

public class JiHe1<T> {
    private T[] arr;//定义一个集合
    private int size;//定义一个变量来保存集合的长度

    public int length() {
        return size;
    }

    public JiHe1(int size) {
        this.size = size;
        arr = (T[]) new Object[size];//强制转换为T[]类型的数组
    }

    public void set(int index, T val) {
        arr[index] = val;
    }

    public T get(int index) {
        return arr[index];
    }

    public static void main(String[] args) {
        JiHe1<Integer> jh = new JiHe1<>(5);
        jh.set(2, 45);
        jh.set(0, 60);
        out(jh);//正确，Ineger是Nunber的子类
        System.out.println("-----------------------------");
        System.out.println(jh.get(2));//显示集合中的某个元素
        System.out.println("-----------------------------");
        JiHe1<Student> jh2 = new JiHe1(5);
        Student s1 = new Student("孙悟空", 500);
        Student s2 = new Student("牛魔王", 400);
        Student s3 = new Student("红孩儿", 100);
        jh2.set(1, s1);
        jh2.set(3, s2);
        jh2.set(4, s3);
        //out(jh2);//错误，因为Student不是Nunber的子类
    }
    /**
     * 限制JiHe的输入及输出类型
     */
    public static void out(JiHe1<? extends Number> jh) {//T可能的类型不知道，所有只能用问号
        for (int i = 0; i < jh.length(); i++) {
            System.out.println(jh.get(i));
        }
        System.out.println();
    }
}
